package cn.iocoder.yudao.module.wine.service.userfans;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.wine.controller.app.userfans.vo.*;
import cn.iocoder.yudao.module.wine.dal.dataobject.userfans.UserFansDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 用户粉丝信息 Service 接口
 *
 * @author 管理员
 */
public interface UserFansService {

    /**
     * 创建用户粉丝信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createUserFans(@Valid AppUserFansSaveReqVO createReqVO);

    /**
     * 更新用户粉丝信息
     *
     * @param updateReqVO 更新信息
     */
    void updateUserFans(@Valid AppUserFansSaveReqVO updateReqVO);

    /**
     * 删除用户粉丝信息
     *
     * @param id 编号
     */
    void deleteUserFans(Long id);

    /**
     * 获得用户粉丝信息
     *
     * @param id 编号
     * @return 用户粉丝信息
     */
    UserFansDO getUserFans(Long id);

    /**
     * 获得用户粉丝信息分页
     *
     * @param pageReqVO 分页查询
     * @return 用户粉丝信息分页
     */
    PageResult<UserFansDO> getUserFansPage(AppUserFansPageReqVO pageReqVO);

    /**
     * 关注/取关 用户
     * @param createReqVO
     * @return
     */
    Integer subscribe(AppUserFansSaveReqVO createReqVO);


    /**
     * 小程序粉丝列表
     * @return
     */
    List<AppUserFansListVO> getFansList(AppUserFansReqVO reqVO);

    List<AppUserFansListVO> getSubscribeList(AppUserFansReqVO reqVO);

    /**
     * 获取粉丝数量
     * @param id
     * @return
     */
    Long getFansNum(Long id);

    /**
     * 获取我关注的人数
     * @param id
     * @return
     */
    Long getSubscribeNum(Long id);
}
